# encoding:utf-8
import json
import os
from config.all_paths import allure_report_suites_json


def readJson(filepath):
    '''
    读取json内容,返回字典格式的数据

    参数:
    filepath (str): 要读取的JSON文件路径。必须是有效的文件路径。

    返回:
    dict: 如果文件内容格式正确，返回字典数据；如果文件格式无效，则返回None。
    '''
    if not os.path.exists(filepath):
        raise FileNotFoundError(f"{filepath} 不存在.")

    with open(filepath, 'r', encoding='utf8') as f:
        try:
            json_data = json.load(f)
            print(json_data)
            print(type(json_data))
            return json_data
        except json.JSONDecodeError as e:
            print(f"读取 {filepath} 时发生错误: {e}")
            return None


def writeJson(filepath, data, indent=4):
    '''
    将字典数据写入到json文件中

    参数:
    filepath (str): 要写入的JSON文件路径。
    data (dict): 要写入的字典数据，格式为{key: value}。
    indent (int, 可选): 用于格式化JSON输出的缩进空格数，默认为4。如果不需要缩进，可以设置为None。

    返回:
    None: 该函数没有返回值，但会将数据写入指定路径的JSON文件。
    '''
    with open(filepath, 'w', encoding='utf8') as f:
        json.dump(data, f, ensure_ascii=False, indent=indent)
        print(f"数据已写入 {filepath}")


def mergeJsonFiles(filepaths):
    '''
    合并多个json文件

    参数:
    filepaths (list of str): 一个包含多个JSON文件路径的列表，每个路径为字符串类型。

    返回:
    dict: 合并后的字典数据，包含所有文件中的键值对。
          如果多个文件包含相同的键，后面的文件会覆盖前面的值。
    '''
    merged_data = {}
    for filepath in filepaths:
        data = readJson(filepath)
        if data:
            merged_data.update(data)
    return merged_data


def updateJson(filepath, key, value):
    '''
    更新json文件中的某个键值对

    参数:
    filepath (str): 要更新的JSON文件路径。
    key (str): 要更新的键，类型为字符串。
    value (任何类型): 与指定键关联的值，可以是任何数据类型（如str, int, list, dict等）。

    返回:
    None: 该函数没有返回值，但会更新指定键的值并写回文件。
    '''
    data = readJson(filepath)
    if data is not None:
        data[key] = value
        writeJson(filepath, data)
        print(f"已将 {key} 更新为 {value} 在 {filepath}")


if __name__ == '__main__':
    print(readJson(allure_report_suites_json))
